1 Abstract


우리의 일상 경험은 연속적인 정보의 흐름으로 구성되어 있다. 이러한 정보의 흐름은 경험 당시의 시공간, 인지 및 정서적 맥락과 연합되어 개별적인 단위로 나누어지고 각각의 고유한 일화 기억으로 자리 잡는다. 최근의 일화 기억 연구들은 기억 체계가 정보의 흐름을 어떻게 단위화하여 일화 기억을 형성하는지에 초점을 맞추어 왔다. 우리는 어떻게 연속적인 정보를 개별적인 사건으로 지각하는가? 사건 지각에 대한 이론들은 우리가 사건의 경계(event boundary)를 접하게 될 때, 이 경계를 기준으로 경험을 분할하여 지각한다고 제안한다 (Radvansky, 2012; Zacks, Speer, Swallow, Braver, & Reynolds, 2007). 여기서 사건 경계는 경험 상에 발생하는 공간적 변화, 지각적 변화, 인지적 변화(정서, 목표 상태 등)를 포함한다. 이러한 경계를 접한 기억 체계는 이 경험을 고유한 사건들로 분할하고, 사건들 안의 정보를 통합하여 사건 내의 시간적 순서, 하위 사건들의 내용, 하위 사건들 간의 연합 등에 대한 일화 기억을 형성한다 (Clewett, DuBrow, & Davachi, 2019). 이렇게 분할된 사건 기억이 형성되면, 사건 간/내의 시간적 순서에 대한 기억, 사건 간/내의 시간 흐름의 지각, 전체 사건의 지속 시간에 대한 추정, 사건 배경과 세부 항목 간의 연합 기억, 세부 항목 자체에 대한 재인 기억 등 일화 기억의 다양한 측면에 영향을 준다(Boundary Effect). 특히, 통합된 Event Memory 내에서는 사건 간의 Temporal Order Memory가 온전한 반면, 분리된 Event Memory 간에는 Temporal Order Memory 가 손상되는 것이 두드러지게 관찰되어왔다.



한편, 사건 기억의 형성에는 공간적, 지각적, 인지적 맥락의 변화와 안정성만이 영향을 주는 것은 아니다. 일상의 경험에는 수많은 맥락 변화가 있으나, 이 모든 것이 개별적인 일화로 지각되지는 않는다. 이는 다양한 맥락 변화가 사전 경험에 의해 예측되기 때문일 수 있다. 대부분의 일상 경험은 유사한 장소에서 유사한 순서로 진행된다. 이러한 유사성에 근거하여, 우리의 뇌는 새로운 사건이 어떻게 펼쳐질지에 대한 예측을 형성할 수 있다. 그리고 이 예측은 이어지는 정보들을 부호화하는 과정에 활용되어 일화 기억 형성에 영향을 미칠 수 있을 것이다. 구체적으로, 새롭게 경험하는 정보 흐름이 예측과 일치하면 흐름 중에 맥락 변화가 발생하더라도 하나의 사건으로 통합될 수 있다. 반면, 예측과 어긋나면 뚜렷한 맥락 변화가 없더라도 정보들이 구분되는 일화로 기억될 가능성이 있다.


이에 본 연구는 다양한 맥락 변화로 구성된 경험에서의 일화 기억 형성에 사전 경험에 의한 예측이 어떤 영향을 미치는지 살펴보고자 하였다. 총 48명의 참가자가 실험에 참여하였다. 실험은 참가자 간 요인인 공고화 집단 조건과 참가자 내 요인인 사전 경험과의 일치 여부가 조합된 혼합 요인 설계로 구성되었다. 실험 과제는 맥락 학습 및 검사, 사건 학습, 순서 검사의 3개 과제로 구성되었다. 맥락 학습 및 검사는 이어질 학습 과제의 맥락 변화에 대한 예측을 형성하기 위한 과제로, 특정 배경을 연속적으로 반복 제시 및 검사하여 참가자들이 배경 맥락 변화에서의 예측을 형성할 수 있도록 유도하였다. 이어서, 참가자들은 공고화 집단과 즉시 집단으로 구분되어 할당되었다. 공고화 집단에서는 공고화 유도를 위해 24시간 뒤 사건 학습 과제와 순서 검사 과제를 수행하였다. 즉시 집단의 참가자들은 맥락 학습 및 검사 후 즉시 사건 학습 및 순서 검사 과제를 수행하였다. 사건 학습 과제에서는 앞서 노출되었던 배경 맥락들이 천천히 변화하며 맥락 하에서 연속적으로 제시되는 여러 가지 물체들을 학습하였다. 이때, 참가자 내 요인으로 사전 맥락 학습과의 일치/불일치 여부가 조작되었다. 일치 조건에서는 배경 맥락이 사전에 경험한 순서대로 제시된 반면, 불일치 조건에서는 사전 경험과 일치하지 않는 순서로 제시되었다. 이어서 순서 검사 과제에서는 앞서 학습한 물체가 두개씩 제시되었다. 참가자들의 과제는 두 물체 중 어떤 물체가 시간적으로 우선하여 나왔는지 판단하는 것이었다.



실험 결과, 두 집단 모두에서 사건 내(Within)의 Temporal Order Memory가 Event 간(Across) 보다 더 우수한 경계 효과(Boundary Effect)가 재현되었다. 가설과 일치하게, 이러한 경계 효과(Within – Across) 는 일치(Paired) 조건에서 불일치(Non-paired) 조건보다 감소하였다. 구체적으로, 일치(Paired) 조건에서 경계 효과(Boundary Effect)의 감소는 사건 간(Across) 의 Temporal Order Memory 수행 증가에 의해 이루어졌다. 그러나 공고화 여부의 효과는 나타나지 않아 두 집단 모두에서 동일한 패턴이 관찰되었다.




2 Results


set.seed(12345) # for reproducibility
options(knitr.kable.NA = '')

# install // load packages 
# Some packages need to be loaded. 
# We use `pacman` as a package manager, which takes care of the other packages. 
if (!require("distill", quietly = TRUE)) install.packages("distill")
if (!require("devtools", quietly = TRUE)) install.packages("devtools")
if (!require("papaja", quietly = TRUE)) devtools::install_github("crsh/papaja")
if (!require("patchwork", quietly = TRUE)) devtools::install_github("thomasp85/patchwork")
if (!require("klippy", quietly = TRUE)) devtools::install_github("RLesur/klippy")
if (!require("pacman", quietly = TRUE)) install.packages("pacman")
if (!require("Rmisc", quietly = TRUE)) install.packages("Rmisc")
if (!require("ggbeeswarm", quietly = TRUE)) install.packages("ggbeeswarm") # Never load it directly.
pacman::p_load(tidyverse, papaja, knitr, dplyr, car, psych, afex, lme4, lmerTest, 
               emmeans, ggplot2, ggpubr, lattice, latticeExtra, parallel, effects, psycho, caret,
               effectsize, rstatix)
library("patchwork"); library("klippy")
klippy::klippy()


2.1 Phase 1 - Association Memory Test


실험 1 (Immediate) & 실험 2 (Consolidated), Phase 1 Association Memory Test의 수행 변화를 분석하였다.


t1 <- read.csv("data/evMEM_p1_all.csv", header = T)
glimpse(t1, width = 70)
## Rows: 5,760
## Columns: 17
## $ SN        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ exp       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ Trial     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
## $ Block     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ mBlock    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,…
## $ bTrial    <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
## $ tType     <int> 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1,…
## $ Sce1_Idx  <int> 108, 49, 109, 29, 129, 179, 53, 119, 187, 224, 152…
## $ Sce2_Idx  <int> 47, 77, 64, 28, 115, 52, 231, 55, 33, 235, 25, 9, …
## $ Sce3_Idx  <int> 133, 236, 210, 211, 235, 151, 64, 130, 47, 243, 33…
## $ Sce1_name <chr> " sce_108.jpg", " sce_049.JPG", " sce_109.jpg", " …
## $ Sce2_name <chr> " sce_047.jpg", " sce_077.jpg", " sce_064.jpg", " …
## $ Sce3_name <chr> " sce_133.jpg", " sce_236.jpg", " sce_210.jpg", " …
## $ Ans       <int> 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2,…
## $ Resp      <int> 2, 2, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2,…
## $ RT        <dbl> 1.4325, 1.3060, 1.3300, 1.2963, 1.4151, 1.3705, 1.…
## $ Corr      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…

t1$SN = factor(t1$SN)
t1$exp = factor(t1$exp, levels=c(1,2), labels=c("imm","cons"))
t1$Block = factor(t1$Block)
t1$mBlock = factor(t1$mBlock)
t1$tType = factor(t1$tType, levels=c(1,2), labels=c("paired","unpaired")) 
t1$Sce1_Idx = factor(t1$Sce1_Idx)
t1$Sce2_Idx = factor(t1$Sce2_Idx)
t1$Sce3_Idx = factor(t1$Sce3_Idx)
# t1$RT <- t1$RT;
t1$Corr <- as.numeric(t1$Corr==1)


참가자의 반응시간을 분석하였다. 분석에는 올바르게 반응한 시행만 포함되었다. 자동적 반응(<200ms)과 과도하게 늦은 반응(>10000ms)을 제거하였고, 평균으로부터 +-3SD를 넘는 시행을 가외치로 판단하여 제거하였다. 아래에 조건과 블록 반복에 따른 반응시간 변화를 요약하였다.


ct1 <- t1 %>% filter(Corr == 1) # filter(Corr == 1) # remove incorrect trial
100-100*(nrow(ct1)/nrow(t1))
## [1] 4.652778

# trimming 3sd outlier trials
tt1 <- ct1 %>% filter(RT > .200 & RT < 10.000) %>%
  group_by(SN) %>% # grouping by participants
  nest() %>%
  mutate(lbound = map(data, ~mean(.$RT)-3*sd(.$RT)),
         ubound = map(data, ~mean(.$RT)+3*sd(.$RT))) %>% # make new data (3sd cut)
  unnest(c(lbound, ubound))%>% 
  unnest(data) %>% 
  mutate(Outlier = (RT < lbound)|(RT > ubound)) %>% # set outlier
  filter(Outlier == FALSE) %>% # filtering outlier
  ungroup() %>% 
  dplyr::select(SN, exp, Block, mBlock, tType, Sce1_Idx, Sce2_Idx, Sce3_Idx, RT, Corr) # select variables to analyze

# outlier trial ratio
100-100*(nrow(tt1)/nrow(ct1))
## [1] 1.383831

# RTs were trimmed
# when 1) faster than 200ms 2) slower than 10 secs 3) 3SD away from the participants mean

# mean number of trials for each conditions
tt1 %>% group_by(SN, exp, tType) %>% 
  summarise(NumTrial = length(RT)) %>%
  ungroup() %>%
  group_by(exp, tType) %>%
  summarise(Mean = mean(NumTrial), 
            Median = median(NumTrial), 
            Min = min(NumTrial), 
            Max = max(NumTrial)) %>% 
  ungroup %>%
  kable(digits=2)
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
## `summarise()` has grouped output by 'exp'. You can override using the `.groups` argument.
exp tType Mean Median Min Max
imm paired 55.42 56.0 47 60
imm unpaired 55.75 56.0 49 59
cons paired 57.17 58.0 50 60
cons unpaired 57.33 57.5 48 60


t1rtL <- tt1 %>% group_by(SN, exp, Block, tType) %>%
  summarise(RT = mean(RT)) %>%
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Block'. You can override using the `.groups` argument.
# t1rtL %>% kable(digits=2)

# subject-level, wide format (SN/Btw/Block)
t1rtW <- t1rtL %>% spread(key=Block, value = RT)
# t1rtW %>% kable(digits=2)

# summary table: grand mean (eyerep/locrep)
t1rtG <- t1rtL %>% group_by(exp, Block, tType) %>%
  summarise(RT.m = mean(RT), RT.sd = sd(RT)) %>%
  ungroup()
## `summarise()` has grouped output by 'exp', 'Block'. You can override using the `.groups` argument.
t1rtG$RT.se <- Rmisc::summarySEwithin(data = t1rtL, measurevar = "RT", 
                                      idvar = "SN", betweenvars = "exp", withinvars = c("Block", "tType"))$se
t1rtG$RT.ci <- Rmisc::summarySEwithin(data = t1rtL, measurevar = "RT", 
                                      idvar = "SN", betweenvars = "exp",withinvars = c("Block", "tType"))$ci
t1rtG <- t1rtG %>% 
  mutate(lower.ci = RT.m-RT.ci,
         upper.ci = RT.m+RT.ci,
         lower.se = RT.m-RT.se,
         upper.se = RT.m+RT.se,)
t1rtG %>% 
  dplyr::select(exp, tType, Block, RT.m) %>% 
  spread(key = Block, value = RT.m) %>% 
  kable(digits=2)
exp tType 1 2 3 4
imm paired 1.58 1.40 1.27 1.19
imm unpaired 1.59 1.36 1.28 1.21
cons paired 1.58 1.31 1.21 1.15
cons unpaired 1.56 1.36 1.24 1.15


참가자들의 반응 정확도를 분석하였다.


t1acc.sn <- t1 %>% filter(Block==4) %>%  group_by(SN, exp) %>%
  dplyr::summarise(Acc = mean(Corr)*100) %>%
  ungroup()
## `summarise()` has grouped output by 'SN'. You can override using the `.groups` argument.

ggplot() + 
  geom_bar(data=t1acc.sn, aes(x = SN, y = Acc, fill=exp), stat="identity") + 
  # ggtitle("참가자별 평균 반응시간") +
  xlab("Subjects") + ylab("Accuracy") + theme_bw() +
  coord_cartesian(ylim = c(80,100), clip = "on") +
  scale_fill_manual(values = c("#2C57AA", "#F17402"), # c("#F17402", "#2C57AA"), c("#feb24c", "#91bfdb")
                    labels = c("Immediate","Consolidated")) +  
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = 'top',
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())

  
# subject-level, long format (SN/Btw/Block)
t1accL <- t1 %>% group_by(SN, exp, Block, tType) %>%
  dplyr::summarise(Acc = mean(Corr)*100) %>%
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Block'. You can override using the `.groups` argument.
# t1accL %>% kable(digits=2)

# subject-level, wide format (SN/Btw/Block)
t1accW1 <- t1accL %>% spread(key=Block, value = Acc)
# t1accW1 %>% kable(digits=2)

# summary table: grand mean (eyerep/locrep)
t1accG <- t1accL %>% group_by(exp, Block, tType) %>%
  summarise(Acc.m = mean(Acc), Acc.sd = sd(Acc)) %>%
  ungroup()
## `summarise()` has grouped output by 'exp', 'Block'. You can override using the `.groups` argument.
t1accG$Acc.se <- Rmisc::summarySEwithin(data = t1accL, measurevar = "Acc", 
                                        idvar = "SN", betweenvars="exp",withinvars = c("Block", "tType"))$se
t1accG$Acc.ci <- Rmisc::summarySEwithin(data = t1accL, measurevar = "Acc", 
                                        idvar = "SN", betweenvars="exp",withinvars = c("Block", "tType"))$ci
t1accG <- t1accG %>% 
  mutate(lower.ci = Acc.m-Acc.ci,
         upper.ci = Acc.m+Acc.ci,
         lower.se = Acc.m-Acc.se,
         upper.se = Acc.m+Acc.se)

t1accG %>% 
  dplyr::select(exp, tType, Block, Acc.m) %>% 
  spread(key = Block, value = Acc.m) %>% 
  kable(digits=2)
exp tType 1 2 3 4
imm paired 88.61 92.78 96.11 96.67
imm unpaired 88.89 94.44 97.50 96.67
cons paired 93.89 96.39 98.06 98.61
cons unpaired 93.33 96.94 97.50 99.17
# values = c("#F17402", "#2C57AA") 
# values = c("darkred", "darkblue")
p1.L.rt.g <- t1rtG
p1.L.rt.g.plot1 <- ggplot(data=p1.L.rt.g , 
                              aes(x=Block, y=RT.m, ymin=RT.m-RT.ci, ymax=RT.m+RT.ci, color=tType, shape=tType)) +
  geom_point(size = 5, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = tType), position = position_dodge(.3), size=1) + 
  facet_grid(.~exp, scales="free_x", space = "free",
             labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
  scale_color_manual(values = c("#ED7D31", "#70AD47")) + # c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Response Time (s)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = 'top',
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
p1.L.rt.g.plot1

p1.L.acc.g <- t1accG
p1.L.acc.g.plot1 <- ggplot(data=p1.L.acc.g , 
                          aes(x=Block, y=Acc.m, ymin=Acc.m-Acc.ci, ymax=Acc.m+Acc.ci, color=tType, shape=tType)) +
  geom_point(size = 5, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = tType), position = position_dodge(.3), size=1) + 
  facet_grid(.~exp, scales="free_x", space = "free",
             labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
  scale_color_manual(values = c("#ED7D31", "#70AD47")) + # c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(80,105), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Accuracy (%)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = 'top',
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
p1.L.acc.g.plot1


p1.L.rt.g <- t1rtG %>% filter(Block == 4)
p1.L.rt.l <- t1rtL %>% filter(Block == 4)
p1.L.rt.w <- p1.L.rt.l %>% select(SN, exp, tType, RT) %>% spread(key =tType, value=RT)

p1.L.rt.g.plot1 <- ggplot() +
  geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
  
  geom_violin(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType), width = 0.7, trim=TRUE, 
            position = position_dodge(0.80), alpha = 0.15) +
  geom_dotplot(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType),
               binaxis = "y", stackdir = "center", stackratio = 1.3,
               color = "black", alpha = 0.5, #position = "nudge",
               position=position_dodge(0.8),
               inherit.aes = TRUE, binwidth = 0.035) +
  
  # geom_point(data=p1.L.rt.l, aes(x=exp, y=RT, fill=tType), size = 1, 
  #            position = position_dodge(.8),  color="gray80", show.legend = F) +
  # geom_segment(data=filter(p1.L.rt.w, exp == "imm"), inherit.aes = FALSE,
  #              aes(x=0.8, y=filter(p1.L.rt.w, exp == "imm")$paired,
  #                  xend=1.2, yend=filter(p1.L.rt.w, exp == "imm")$unpaired),
  #              color="gray90", alpha = .7) +
  # geom_segment(data=filter(p1.L.rt.w, exp == "cons"), inherit.aes = FALSE,
  #              aes(x=1.8, y=filter(p1.L.rt.w, exp == "cons")$paired,
  #                  xend=2.2, yend=filter(p1.L.rt.w, exp == "cons")$unpaired),
  #              color="gray90", alpha = .7) +
  geom_pointrange(data=p1.L.rt.g, aes(x = exp, y=RT.m, ymin = RT.m-RT.ci, ymax = RT.m+RT.ci, color = tType),
                  position = position_dodge(0.80), size = 1.3, show.legend = TRUE) +
  scale_fill_manual(values = c("#ED7D31", "#70AD47")) +
  scale_color_manual(values = c("#ED7D31", "#70AD47")) +
  
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("Immediate", "Consolidated")) +
  labs(x = "Condition", y = "Response Time (ms)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = "top",
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
p1.L.rt.g.plot1

p1.L.acc.g <- t1accG %>% filter(Block == 4)
p1.L.acc.l <- t1accL %>% filter(Block == 4)
p1.L.acc.w <- p1.L.acc.l %>% select(SN, exp, tType, Acc) %>% spread(key =tType, value=Acc)

p1.L.acc.g.plot1 <- ggplot() +
  # geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
  geom_violin(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType), width = 0.7, trim=TRUE, 
              position = position_dodge(0.80), alpha = 0.15) +
  geom_dotplot(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType),
               binaxis = "y", stackdir = "center", stackratio = 1.3,
               color = "black", alpha = 0.5, #position = "nudge",
               position=position_dodge(0.8),
               inherit.aes = TRUE, binwidth = 0.1) +
  # geom_point(data=p1.L.acc.l, aes(x=exp, y=Acc, fill=tType), size = 1, 
  #            position = position_dodge(.8),  color="gray80", show.legend = F) +
  # geom_segment(data=filter(p1.L.acc.w, exp == "imm"), inherit.aes = FALSE,
  #              aes(x=0.8, y=filter(p1.L.acc.w, exp == "imm")$paired,
  #                  xend=1.2, yend=filter(p1.L.acc.w, exp == "imm")$unpaired),
  #              color="gray90", alpha = .7) +
  # geom_segment(data=filter(p1.L.acc.w, exp == "cons"), inherit.aes = FALSE,
  #              aes(x=1.8, y=filter(p1.L.acc.w, exp == "cons")$paired,
  #                  xend=2.2, yend=filter(p1.L.acc.w, exp == "cons")$unpaired),
  #              color="gray90", alpha = .7) +
  geom_pointrange(data=p1.L.acc.g, aes(x = exp, y=Acc.m, ymin = Acc.m-Acc.ci, ymax = Acc.m+Acc.ci, color = tType),
                  position = position_dodge(0.80), size = 1.3, show.legend = TRUE) +
  scale_color_manual(values = c("#ED7D31", "#70AD47")) +
  scale_fill_manual(values = c("#ED7D31", "#70AD47")) +
  
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(80,105), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("Immediate", "Consolidated")) +
  labs(x = "Condition", y = "Accuracy (%)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = "top",
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())

p1.L.acc.g.plot1

# fig1_2.behav <- ggarrange(p1.L.rt.g.plot1, p1.L.acc.g.plot1, nrow = 2)
# fig1_2.behav


p1.L.rt.g <- t1rtG %>% filter(Block == 4)
p1.L.rt.l <- t1rtL %>% filter(Block == 4)
p1.L.rt.w <- p1.L.rt.l %>% select(SN, exp, tType, RT) %>% spread(key =exp, value=RT)

p1.L.rt.g.plot3 <- ggplot() +
  # geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
  geom_violin(data= p1.L.rt.l, aes(x = tType, y=RT, fill = exp), width = 0.7, trim=TRUE, 
              position = position_dodge(0.80), alpha = 0.15) + 
  # ggbeeswarm::geom_quasirandom(data= p1.L.rt.l, aes(x = tType, y=RT, color = exp, fill = exp), 
  #                              size = 3, alpha = 0.2, width = 0.2, #color = "blue", 
  #                              position = "dodge") +
  geom_dotplot(data= p1.L.rt.l, aes(x = tType, y=RT, fill = exp),
               binaxis = "y", stackdir = "center", stackratio = 1.3,
               color = "black", alpha = 0.5, position = position_dodge(0.80),
               inherit.aes = TRUE, binwidth = 0.03, show.legend = FALSE) +
  geom_pointrange(data=p1.L.rt.g, aes(x = tType, y=RT.m, ymin = RT.m-RT.ci, ymax = RT.m+RT.ci, color = exp),
                  position = position_dodge(0.80), size = 1.3, show.legend = T, alpha = 1) +
  scale_color_manual(values = c("#2C57AA","#F17402"), 
                    labels = c("Immediate", "Consolidated")) +
  scale_fill_manual(values = c("#2C57AA","#F17402"),
                    labels = c("Immediate", "Consolidated")) +
  
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0.500,2.000), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("Paired", "Unpaired")) +
  labs(x = "Condition", y = "Response Time (ms)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = "top",
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
p1.L.rt.g.plot3

p1.L.acc.g <- t1accG %>% filter(Block == 4)
p1.L.acc.l <- t1accL %>% filter(Block == 4)
p1.L.acc.w <- p1.L.acc.l %>% select(SN, exp, tType, Acc) %>% spread(key =exp, value=Acc)

p1.L.acc.g.plot3 <- ggplot() +
  # geom_hline(yintercept=0, linetype='dashed', color='gray60', alpha =1, size=1) +
  geom_violin(data= p1.L.acc.l, aes(x = tType, y=Acc, fill = exp), width = 0.7, trim=TRUE, 
              position = position_dodge(0.80), alpha = 0.15) + 
  # ggbeeswarm::geom_quasirandom(data= p1.L.acc.l, aes(x = tType, y=Acc, color = exp, fill = exp), 
  #                              size = 3, alpha = 0.2, width = 0.2, #color = "blue", 
  #                              position = "dodge") +
  geom_dotplot(data= p1.L.acc.l, aes(x = tType, y=Acc, fill = exp),
               binaxis = "y", stackdir = "center", stackratio = 1.3,
               color = "black", alpha = 0.5, position = position_dodge(0.80),
               inherit.aes = TRUE, binwidth = 0.1, show.legend = FALSE) +
  geom_pointrange(data=p1.L.acc.g, aes(x = tType, y=Acc.m, ymin = Acc.m-Acc.ci, ymax = Acc.m+Acc.ci, color = exp),
                  position = position_dodge(0.80), size = 1.3, show.legend = T, alpha = 1) +
  scale_color_manual(values = c("#2C57AA","#F17402"), 
                    labels = c("Immediate", "Consolidated")) +
  scale_fill_manual(values = c("#2C57AA","#F17402"),
                    labels = c("Immediate", "Consolidated")) +
  
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(80,105), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("Paired", "Unpaired")) +
  labs(x = "Condition", y = "Accuracy (%)") +
  theme_bw(base_size = 18) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = "top",
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())

p1.L.acc.g.plot3

# fig1_3.behav <- ggarrange(p1.L.rt.g.plot3, p1.L.acc.g.plot3, nrow = 2)
# fig1_3.behav


마지막 블록에서 공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)를 요인으로 반응 시간에 대한 factorial ANOVA 및 post-hoc 수행하였다.


p1.rt.aov <- aov_ez(id="SN", dv="RT", data = p1.L.rt.l, between = "exp", within = c("tType"))
## Contrasts set to contr.sum for the following variables: exp
nice(p1.rt.aov, es="pes") %>% kable(digits=3)
Effect df MSE F pes p.value
exp 1, 46 0.06 1.09 .023 .301
tType 1, 46 0.01 0.41 .009 .523
exp:tType 1, 46 0.01 0.26 .006 .610

p_h1 <- p1.L.rt.l %>% 
  group_by(exp) %>% 
  rstatix::pairwise_t_test(RT ~ tType, 
                           p.adjust.method="bonferroni", 
                           paired=T, detailed=T) %>% 
  dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)

p_h2 <- p1.L.rt.l %>%
  group_by(exp) %>% 
  rstatix::cohens_d(RT ~ tType, paired=T, ci = F) %>% 
  dplyr::select(exp, group1, group2, effsize, magnitude)

merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>%  kable(digits=3)
exp group1 group2 estimate conf.low conf.high df statistic p.adj p.adj.signif effsize magnitude
cons paired unpaired -0.002 -0.045 0.040 23 -0.121 0.905 ns -0.025 negligible
imm paired unpaired -0.022 -0.089 0.045 23 -0.686 0.500 ns -0.140 negligible

p_h1 <- p1.L.rt.l %>% 
  group_by(tType) %>% 
  rstatix::t_test(RT ~ exp, 
                  paired=F, detailed=T, var.equal = T) %>% 
  dplyr::select(tType, group1, group2, estimate, conf.low, conf.high, df, statistic, p)

p_h2 <- p1.L.rt.l %>%
  group_by(tType) %>% 
  rstatix::cohens_d(RT ~ exp, paired=F, ci = F) %>% 
  dplyr::select(tType, group1, group2, effsize, magnitude)

merge(p_h1, p_h2, by = c("tType", "group1", "group2")) %>%  kable(digits=3)
tType group1 group2 estimate conf.low conf.high df statistic p effsize magnitude
paired imm cons 0.043 -0.062 0.147 46 0.818 0.418 0.236 small
unpaired imm cons 0.062 -0.049 0.173 46 1.127 0.265 0.325 small


마지막 블록에서 공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)를 요인으로 정확도에 대한 factorial ANOVA 및 post-hoc 수행하였다.


p1.acc.aov <- aov_ez(id="SN", dv="Acc", data = p1.L.acc.l, between = "exp", within = c("tType"))
## Contrasts set to contr.sum for the following variables: exp
nice(p1.acc.aov, es="pes") %>% kable(digits=3)
Effect df MSE F pes p.value
exp 1, 46 25.76 4.60 * .091 .037
tType 1, 46 9.58 0.19 .004 .662
exp:tType 1, 46 9.58 0.19 .004 .662

p_h1 <- p1.L.acc.l %>% 
  group_by(exp) %>% 
  rstatix::pairwise_t_test(Acc ~ tType, 
                           p.adjust.method="bonferroni", 
                           paired=T, detailed=T) %>% 
  dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)

p_h2 <- p1.L.acc.l %>%
  group_by(exp) %>% 
  rstatix::cohens_d(Acc ~ tType, paired=T, ci = F) %>% 
  dplyr::select(exp, group1, group2, effsize, magnitude)

merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>%  kable(digits=3)
exp group1 group2 estimate conf.low conf.high df statistic p.adj p.adj.signif effsize magnitude
cons paired unpaired -0.556 -2.198 1.087 23 -0.7 0.491 ns -0.143 negligible
imm paired unpaired 0.000 -2.033 2.033 23 0.0 1.000 ns 0.000 negligible

p_h1 <- p1.L.acc.l %>% 
  group_by(tType) %>% 
  rstatix::t_test(Acc ~ exp, 
                  paired=F, detailed=T, var.equal = T) %>% 
  dplyr::select(tType, group1, group2, estimate, conf.low, conf.high, df, statistic, p)

p_h2 <- p1.L.acc.l %>%
  group_by(tType) %>% 
  rstatix::cohens_d(Acc ~ exp, paired=F, ci = F) %>% 
  dplyr::select(tType, group1, group2, effsize, magnitude)

merge(p_h1, p_h2, by = c("tType", "group1", "group2")) %>%  kable(digits=3)
tType group1 group2 estimate conf.low conf.high df statistic p effsize magnitude
paired imm cons -1.944 -4.496 0.607 46 -1.534 0.132 -0.443 small
unpaired imm cons -2.500 -4.829 -0.171 46 -2.161 0.036 -0.624 moderate




2.2 Phase 2 - Event Memory Test


공고화 여부 (Immediate & Consolidated)와 사전 경험 일치 여부 (Paired & Non-paired)에 따른 Phase 2 Event Memory Test의 수행 결과를 분석하였다.


t2 <- read.csv("data/evMEM_p2_all.csv", header = T)
glimpse(t2, width = 70)
## Rows: 11,520
## Columns: 17
## $ SN       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ exp      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Trial    <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Block    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ bTrial   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Cont     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Sch      <int> 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, …
## $ Im1_pos  <int> 27, 15, 6, 16, 8, 20, 26, 32, 5, 17, 2, 4, 13, 18, …
## $ Im2_pos  <int> 31, 19, 10, 20, 12, 24, 30, 36, 9, 21, 6, 8, 17, 22…
## $ Im1_Idx  <int> 221, 276, 388, 26, 88, 129, 367, 176, 109, 392, 183…
## $ Im2_Idx  <int> 287, 296, 225, 129, 110, 125, 328, 325, 227, 77, 38…
## $ Im1_name <chr> " obj_228.jpg", " obj_283.jpg", " obj_397.jpg", " o…
## $ Im2_name <chr> " obj_294.jpg", " obj_304.jpg", " obj_232.jpg", " o…
## $ Ans      <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ Resp     <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ RT       <dbl> 2.5424, 2.7890, 2.1054, 4.8810, 1.9130, 1.3525, 1.1…
## $ Corr     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …

# check number of trials for each condition/SN
table(t2$SN)
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
## 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 
##  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
## 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 
##  41  42  43  44  45  46  47  48 
## 240 240 240 240 240 240 240 240
table(t2$Block, t2$SN) 
##     
##       1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
##   1  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   2  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   3  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   4  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   5  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   6  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   7  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   8  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   9  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   10 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##     
##      26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
##   1  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   2  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   3  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   4  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   5  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   6  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   7  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   8  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   9  24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
##   10 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
table(t2$Cont, t2$SN) 
##    
##       1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19
##   1 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##   2 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##    
##      20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38
##   1 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##   2 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120
##    
##      39  40  41  42  43  44  45  46  47  48
##   1 120 120 120 120 120 120 120 120 120 120
##   2 120 120 120 120 120 120 120 120 120 120

# change class of main factors: double to factor
t2$SN = factor(t2$SN)
t2$exp = factor(t2$exp, levels=c(1,2), labels=c("imm","cons"))

t2$Block = factor(t2$Block)
t2$Cont = factor(t2$Cont, levels=c(1,2), labels=c("paired","unpaired")) # for afex
t2$Sch = factor(t2$Sch, levels=c(1, 2), labels=c("within", "across"))
t2$Im_comb = t2$Im1_pos + t2$Im2_pos
t2$Im_comb = factor(t2$Im_comb)
t2$Im1_pos = factor(t2$Im1_pos)
t2$Im2_pos = factor(t2$Im2_pos)
t2$Im1_Idx = factor(t2$Im1_Idx)
t2$Im2_Idx = factor(t2$Im2_Idx)
t2$Ans = factor(t2$Ans)
t2$RT <- t2$RT; t2$Corr <- as.numeric(t2$Corr==1)

t2$evPos <- 0
t2[t2$Sch=="within",]$evPos <- 1

t2[t2$Im1_pos==1,]$evPos <- 1
t2[t2$Im1_pos==2,]$evPos <- 1
t2[t2$Im1_pos==7,]$evPos <- 2
t2[t2$Im1_pos==8,]$evPos <- 2
t2[t2$Im1_pos==13,]$evPos <- 3
t2[t2$Im1_pos==14,]$evPos <- 3
t2[t2$Im1_pos==19,]$evPos <- 4
t2[t2$Im1_pos==20,]$evPos <- 4
t2[t2$Im1_pos==25,]$evPos <- 5
t2[t2$Im1_pos==26,]$evPos <- 5
t2[t2$Im1_pos==31,]$evPos <- 6
t2[t2$Im1_pos==32,]$evPos <- 6

# t2[t2$Im1_pos==1,]$evPos <- 1
# t2[t2$Im1_pos==2,]$evPos <- 1
# t2[t2$Im1_pos==7,]$evPos <- 2
# t2[t2$Im1_pos==8,]$evPos <- 2
# t2[t2$Im1_pos==13,]$evPos <- 1
# t2[t2$Im1_pos==14,]$evPos <- 1
# t2[t2$Im1_pos==19,]$evPos <- 2
# t2[t2$Im1_pos==20,]$evPos <- 2
# t2[t2$Im1_pos==25,]$evPos <- 1
# t2[t2$Im1_pos==26,]$evPos <- 1
# t2[t2$Im1_pos==31,]$evPos <- 2
# t2[t2$Im1_pos==32,]$evPos <- 2

t2[t2$Sch=="across",]$evPos <- 1

t2[t2$Im1_pos==1,]$evPos <- 1
t2[t2$Im1_pos==2,]$evPos <- 1

t2[t2$Im1_pos==7,]$evPos <- 1
t2[t2$Im1_pos==8,]$evPos <- 1
t2[t2$Im1_pos==13,]$evPos <- 2
t2[t2$Im1_pos==14,]$evPos <- 2
t2[t2$Im1_pos==19,]$evPos <- 2
t2[t2$Im1_pos==20,]$evPos <- 2
t2[t2$Im1_pos==25,]$evPos <- 3
t2[t2$Im1_pos==26,]$evPos <- 3
t2[t2$Im1_pos==31,]$evPos <- 3
t2[t2$Im1_pos==32,]$evPos <- 3


t2[t2$Im1_pos==3,]$evPos <- 1
t2[t2$Im1_pos==4,]$evPos <- 1
t2[t2$Im1_pos==5,]$evPos <- 1
t2[t2$Im1_pos==6,]$evPos <- 1
t2[t2$Im1_pos==15,]$evPos <- 2
t2[t2$Im1_pos==16,]$evPos <- 2
t2[t2$Im1_pos==17,]$evPos <- 2
t2[t2$Im1_pos==18,]$evPos <- 2
t2[t2$Im1_pos==27,]$evPos <- 3
t2[t2$Im1_pos==28,]$evPos <- 3
t2[t2$Im1_pos==29,]$evPos <- 3
t2[t2$Im1_pos==30,]$evPos <- 3


headTail(t2)
##         SN  exp Trial Block bTrial   Cont    Sch Im1_pos Im2_pos Im1_Idx
## 1        1  imm     1     1      1 paired across      27      31     221
## 2        1  imm     2     1      2 paired across      15      19     276
## 3        1  imm     3     1      3 paired across       6      10     388
## 4        1  imm     4     1      4 paired across      16      20      26
## ...   <NA> <NA>   ...  <NA>    ...   <NA>   <NA>    <NA>    <NA>    <NA>
## 11517   48 cons   237    10     21 paired within      20      24     171
## 11518   48 cons   238    10     22 paired within       1       5     192
## 11519   48 cons   239    10     23 paired across      15      19     156
## 11520   48 cons   240    10     24 paired within      13      17     162
##       Im2_Idx     Im1_name     Im2_name  Ans Resp    RT Corr Im_comb evPos
## 1         287  obj_228.jpg  obj_294.jpg    2    2  2.54    1      58     3
## 2         296  obj_283.jpg  obj_304.jpg    2    2  2.79    1      34     2
## 3         225  obj_397.jpg  obj_232.jpg    1    1  2.11    1      16     1
## 4         129  obj_026.jpg  obj_133.jpg    2    2  4.88    1      36     2
## ...      <NA>         <NA>         <NA> <NA>  ...   ...  ...    <NA>   ...
## 11517     202  obj_196.jpg  obj_228.jpg    2    2  2.01    1      44     2
## 11518     267  obj_218.jpg  obj_295.jpg    1    1 33.92    1       6     1
## 11519     383  obj_179.jpg  obj_422.jpg    1    1 14.87    1      34     2
## 11520      79  obj_185.jpg  obj_091.jpg    2    2  7.04    1      30     2
glimpse(t2, width = 70)
## Rows: 11,520
## Columns: 19
## $ SN       <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ exp      <fct> imm, imm, imm, imm, imm, imm, imm, imm, imm, imm, i…
## $ Trial    <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Block    <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ bTrial   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ Cont     <fct> paired, paired, paired, paired, paired, paired, pai…
## $ Sch      <fct> across, across, across, across, within, within, wit…
## $ Im1_pos  <fct> 27, 15, 6, 16, 8, 20, 26, 32, 5, 17, 2, 4, 13, 18, …
## $ Im2_pos  <fct> 31, 19, 10, 20, 12, 24, 30, 36, 9, 21, 6, 8, 17, 22…
## $ Im1_Idx  <fct> 221, 276, 388, 26, 88, 129, 367, 176, 109, 392, 183…
## $ Im2_Idx  <fct> 287, 296, 225, 129, 110, 125, 328, 325, 227, 77, 38…
## $ Im1_name <chr> " obj_228.jpg", " obj_283.jpg", " obj_397.jpg", " o…
## $ Im2_name <chr> " obj_294.jpg", " obj_304.jpg", " obj_232.jpg", " o…
## $ Ans      <fct> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ Resp     <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, …
## $ RT       <dbl> 2.5424, 2.7890, 2.1054, 4.8810, 1.9130, 1.3525, 1.1…
## $ Corr     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Im_comb  <fct> 58, 34, 16, 36, 20, 44, 56, 68, 14, 38, 8, 12, 30, …
## $ evPos    <dbl> 3, 2, 1, 2, 1, 2, 3, 3, 1, 2, 1, 1, 2, 2, 3, 2, 1, …


2.2.1 Event Memory - Boundary Effect


Temporal Order Memory에서의 경계 효과(Boundary Effect)는 사건 내(Within)의 Temporal Order Memory가 Event 간(Across) 보다 더 우수한 것으로 나타난다. 공고화 여부와 일치 여부에 따른 Boundary Effect를 분석하였다.


t2acc.sn <- t2 %>% group_by(SN, exp) %>%
  dplyr::summarise(Acc = mean(Corr)*100) %>%
  ungroup()
## `summarise()` has grouped output by 'SN'. You can override using the `.groups` argument.

ggplot() + 
  geom_bar(data=t2acc.sn, aes(x = SN, y = Acc, fill=exp), stat="identity") + 
  # ggtitle("참가자별 평균 반응시간") +
  xlab("Subjects") + ylab("Accuracy") + theme_bw() +
  coord_cartesian(ylim = c(50,100), clip = "on") +
  scale_fill_manual(values = c("#2C57AA", "#F17402"), # c("#F17402", "#2C57AA"), c("#feb24c", "#91bfdb")
                    labels = c("Immediate","Consolidated")) +  
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # legend.position = c(0.65, 0.85),
        legend.position = 'top',
        legend.title = element_blank(),
        # aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())


t2accL <- t2 %>% group_by(SN, exp, Cont, Sch) %>%
  dplyr::summarise(Acc = mean(Corr)*100) %>%
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
# t2accL %>% kable(digits=2)

# subject-level, wide format (SN/Btw/Block)
t2accW1 <- t2accL %>% spread(key=Cont, value = Acc)
# t2accW1 %>% kable(digits=2)

t2accW2 <- t2accL %>% spread(key=Sch, value = Acc)
# t2accW2 %>% kable(digits=2)

# summary table: grand mean (eyerep/locrep)
t2accG <- t2accL %>% group_by(exp, Cont, Sch) %>%
  summarise(Acc.m = mean(Acc), Acc.sd = sd(Acc)) %>%
  ungroup()
## `summarise()` has grouped output by 'exp', 'Cont'. You can override using the `.groups` argument.
t2accG$Acc.se <- Rmisc::summarySEwithin(data = t2accL, measurevar = "Acc", 
                                        idvar = "SN", betweenvars = "exp", withinvars = c("Cont", "Sch"))$se
t2accG$Acc.ci <- Rmisc::summarySEwithin(data = t2accL, measurevar = "Acc", 
                                        idvar = "SN", betweenvars = "exp", withinvars = c("Cont", "Sch"))$ci
t2accG <- t2accG %>% 
  mutate(lower.ci = Acc.m-Acc.ci,
         upper.ci = Acc.m+Acc.ci,
         lower.se = Acc.m-Acc.se,
         upper.se = Acc.m+Acc.se)
# for between-subject design. check help(summarySE)
t2accG %>% dplyr::select(exp, Cont, Sch, Acc.m) %>% 
  spread(key=Sch, value=Acc.m) %>% 
  kable(digits=2)
exp Cont within across
imm paired 77.29 68.75
imm unpaired 76.74 63.82
cons paired 85.07 79.44
cons unpaired 84.44 74.58


그래프


t2.plot1 <- ggplot(data=t2accL, aes(x=Cont, y=Acc, fill=Sch)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, 
               width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black", 
  geom_point(data=t2accL, aes(x=Cont, y=Acc, fill=Sch), 
             position=position_dodge(width = 0.8), 
             size=2, show.legend = FALSE, color="gray90", alpha = .9) + # , 
  geom_segment(data=filter(t2accW2, Cont == "paired"), inherit.aes = FALSE,
               aes(x=0.8, y=filter(t2accW2, Cont == "paired")$`within`,
                   xend=1.2, yend=filter(t2accW2, Cont == "paired")$across),
               color="gray90", alpha = .9) +
  geom_segment(data=filter(t2accW2, Cont == "unpaired"), inherit.aes = FALSE,
               aes(x=1.8, y=filter(t2accW2, Cont =="unpaired")$`within`,
                   xend=2.2, yend=filter(t2accW2, Cont =="unpaired")$across),
               color="gray90", alpha = .9) +
  geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
                position=position_dodge(.8), color = "black") +
  facet_grid(.~exp, scales="free_x", space = "free",
             labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
  
  scale_x_discrete(labels=c("Paired","Non-paired")) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
                    labels = c("Within", "Across")) +
  coord_cartesian(ylim = c(0, 120), clip = "on") +
  scale_y_continuous(breaks = c(0,25,50,75,100)) +
  labs(x = "Context Condition", y = "Recency Accuracy (%)", fill ="Boundary Condition") +
  # ggtitle("Association Memory Accuracy") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # aspect.ratio = 0.2,
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position="top")
t2.plot1

# across 조건별
t2.plot2 <- ggplot(data=t2accL, aes(x=Sch, y=Acc, fill=Cont)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, 
               width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black", 
  
  geom_point(data=t2accL, position=position_dodge(0.80), color="gray90", alpha = .9, 
             size=2, show.legend = FALSE) +

  geom_segment(data=filter(t2accW1, Sch == "within"), inherit.aes = FALSE,
               aes(x=0.8, y=filter(t2accW1, Sch == "within")$paired,
                   xend=1.2, yend=filter(t2accW1, Sch == "within")$unpaired),
               color="gray90", alpha = .9) +
  geom_segment(data=filter(t2accW1, Sch == "across"), inherit.aes = FALSE,
               aes(x=1.8, y=filter(t2accW1, Sch == "across")$paired,
                   xend=2.2, yend=filter(t2accW1, Sch == "across")$unpaired),
               color="gray90", alpha = .9) +  
  geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
                position=position_dodge(.8), color = "black") +

  facet_grid(.~exp, scales="free_x", space = "free",
             labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
  scale_x_discrete(labels=c("Within", "Across")) +
  scale_fill_manual(values = c("#ED7D31", "#70AD47"),
                    labels = c("Paired", "Non-paired")) +
  # scale_fill_manual(values = c("#D2E6BD", "#4AA7B4"),  # , "#235796"
  #                   labels = c("Paired", "Non-paired")) +
  coord_cartesian(ylim = c(0, 140), clip = "on") +
  scale_y_continuous(breaks = c(0,25,50,75,100)) +
  labs(x = "Boundary Condition", y = "Recency Accuracy (%)", fill ="Context Condition") +
  # ggtitle("Association Memory Accuracy") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # aspect.ratio = 0.2,
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position="top")
t2.plot2

t2.plot3 <- ggplot(data=t2accL, aes(x=Cont, y=Acc, fill=exp)) +
  geom_violin(data= t2accL, aes(x = Cont, y=Acc, fill = exp), width = 0.7, trim=TRUE, 
              position = position_dodge(0.80), alpha = 0.15) +
  # stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, 
  #              width = 0.8, size = 0.2, color="black") + # , show.legend = FALSE, colour="black", 
  geom_dotplot(data=t2accL, aes(x=Cont, y=Acc, fill=exp),
               binaxis = "y", stackdir = "center", stackratio = 1.2,
               color = "black", alpha = 0.5, #position = "nudge",
               position=position_dodge(0.8),
               inherit.aes = TRUE, binwidth = 1.2) + 
  geom_point(data=t2accG, aes(y = Acc.m, x = Cont, color=exp), 
             position=position_dodge(.8),
             size = 4, show.legend = F) + 
  geom_errorbar(data=t2accG, aes(y = Acc.m, ymin = lower.ci, ymax = upper.ci), width=.2,
                position=position_dodge(.8), color = "black") +
  facet_grid(.~Sch, scales="free_x", space = "free") +
  scale_x_discrete(labels=c("Within", "Across")) +
  scale_fill_manual(values = c("#2C57AA","#F17402"), 
                    labels = c("Immediate", "Consolidated")) +
  scale_color_manual(values = c("#2C57AA","#F17402"), 
                    labels = c("Immediate", "Consolidated")) +
  # scale_fill_manual(values = c("#D2E6BD", "#4AA7B4"),  # , "#235796"
  #                   labels = c("Paired", "Non-paired")) +
  coord_cartesian(ylim = c(0, 120), clip = "on") +
  scale_y_continuous(breaks = c(0,25,50,75,100)) +
  labs(x = "Boundary Condition", y = "Recency Accuracy (%)", fill ="Context Condition") +
  # ggtitle("Association Memory Accuracy") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # aspect.ratio = 0.2,
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position="top")
t2.plot3


2.2.1.1 Factorial ANOVA


공고화 여부 x 일치 여부 x 경계 조건에 따른 Factorial ANOVA 및 Post-hoc 수행


t2.acc.aov1 <- aov_ez(id="SN", dv = "Acc", data = t2accL, between = "exp",within = c("Cont","Sch"))
## Contrasts set to contr.sum for the following variables: exp
# test_sphericity(t2.acc.aov1)
nice(t2.acc.aov1, es="pes")
## Anova Table (Type 3 tests)
## 
## Response: Acc
##         Effect    df    MSE         F   pes p.value
## 1          exp 1, 46 456.70   8.97 **  .163    .004
## 2         Cont 1, 46  25.42 14.21 ***  .236   <.001
## 3     exp:Cont 1, 46  25.42      0.00 <.001   >.999
## 4          Sch 1, 46  48.94 83.67 ***  .645   <.001
## 5      exp:Sch 1, 46  48.94      2.19  .045    .146
## 6     Cont:Sch 1, 46  18.35  12.12 **  .209    .001
## 7 exp:Cont:Sch 1, 46  18.35      0.00 <.001    .955
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

p_h1 <- t2accL %>% 
  group_by(exp, Cont) %>% 
  rstatix::pairwise_t_test(Acc ~ Sch, 
                           p.adjust.method="bonferroni", 
                           paired=T, detailed=T) %>% 
  dplyr::select(exp, Cont, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)

p_h2 <- t2accL %>% 
  group_by(exp, Cont) %>% 
  rstatix::cohens_d(Acc ~ Sch, paired=T, ci = F) %>% 
  dplyr::select(exp, Cont, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "Cont", "group1", "group2")) %>%  kable(digits=3)
exp Cont group1 group2 estimate conf.low conf.high df statistic p.adj p.adj.signif effsize magnitude
cons paired within across 5.625 1.629 9.621 23 2.912 0.008 ** 0.594 moderate
cons unpaired within across 9.861 5.848 13.874 23 5.083 0.000 **** 1.038 large
imm paired within across 8.542 5.914 11.169 23 6.725 0.000 **** 1.373 large
imm unpaired within across 12.917 9.915 15.919 23 8.901 0.000 **** 1.817 large

p_h1 <- t2accL %>% 
  group_by(exp, Sch) %>% 
  rstatix::pairwise_t_test(Acc ~ Cont, 
                           p.adjust.method="bonferroni", 
                           paired=T, detailed=T) %>% 
  dplyr::select(exp, Sch, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)

p_h2 <- t2accL %>% 
  group_by(exp, Sch) %>% 
  rstatix::cohens_d(Acc ~ Cont, paired=T, ci = F) %>% 
  dplyr::select(exp, Sch, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "Sch", "group1", "group2")) %>%  kable(digits=3)
exp Sch group1 group2 estimate conf.low conf.high df statistic p.adj p.adj.signif effsize magnitude
cons across paired unpaired 4.861 1.580 8.142 23 3.065 0.005 ** 0.626 moderate
cons within paired unpaired 0.625 -1.838 3.088 23 0.525 0.605 ns 0.107 negligible
imm across paired unpaired 4.931 1.794 8.067 23 3.251 0.004 ** 0.664 moderate
imm within paired unpaired 0.556 -1.578 2.689 23 0.539 0.595 ns 0.110 negligible

p_h1 <- t2accL %>% 
  group_by(Cont, Sch) %>% 
  rstatix::t_test(Acc ~ exp, 
                  paired=F, detailed=T, var.equal = T) %>% 
  dplyr::select(Cont, Sch, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- t2accL %>% 
  group_by(Cont, Sch) %>% 
  rstatix::cohens_d(Acc ~ exp, paired=F, ci = F) %>% 
  dplyr::select(Cont, Sch, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("Cont", "Sch", "group1", "group2")) %>%  kable(digits=3)
Cont Sch group1 group2 estimate conf.low conf.high df statistic p effsize magnitude
paired across imm cons -10.694 -17.822 -3.567 46 -3.020 0.004 -0.872 large
paired within imm cons -7.778 -14.603 -0.953 46 -2.294 0.026 -0.662 moderate
unpaired across imm cons -10.764 -17.632 -3.896 46 -3.155 0.003 -0.911 large
unpaired within imm cons -7.708 -14.107 -1.309 46 -2.425 0.019 -0.700 moderate


2.2.1.2 GLMM


### GLMM - afex
(nc <- detectCores())
## [1] 8
cl <- makeCluster(rep("localhost", nc))
# t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (Cont*Sch|SN) + (Cont*Sch|Im_comb),
t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (1|SN) + (1|Im_comb) + (1|evPos),
                             data = t2,
                             family = binomial(link="logit"),
                             method = "LRT", cl = cl,
                             expand_re = T,
                             control = lmerControl(optimizer = "bobyqa",
                                                   optCtrl = list(maxfun = 1e7)))
## Contrasts set to contr.sum for the following variables: Cont, Sch, exp, SN, Im_comb
## Fitting 8 (g)lmer() models.

# nested model을 비교하는 method (Singmann, & Kellen, 2017)
# 1) Kenward-Roger approximation : method ="KR"
# 2) Satterthwaite approximation : method = "S"
# 3) Likelihood Ratio Test : method = "LRT"
# 4) Parametric bootstrapping : method = "PB"
stopCluster(cl)

summary(t2.acc.glmixed)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: Corr ~ Cont * Sch * exp + (1 | SN) + (1 | Im_comb) + (1 | evPos)
##    Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 10000000))
## 
##      AIC      BIC   logLik deviance df.resid 
##  11676.0  11756.9  -5827.0  11654.0    11509 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -5.8455  0.1729  0.4069  0.5962  1.4712 
## 
## Random effects:
##  Groups  Name        Variance Std.Dev.
##  SN      (Intercept) 0.44953  0.6705  
##  Im_comb (Intercept) 0.06135  0.2477  
##  evPos   (Intercept) 0.02680  0.1637  
## Number of obs: 11520, groups:  SN, 48; Im_comb, 24; evPos, 3
## 
## Fixed effects:
##                  Estimate Std. Error z value    Pr(>|z|)    
## (Intercept)      1.340472   0.146712   9.137     < 2e-16 ***
## Cont1            0.078806   0.023494   3.354    0.000796 ***
## Sch1             0.279148   0.055848   4.998 0.000000578 ***
## exp1            -0.322640   0.100038  -3.225    0.001259 ** 
## Cont1:Sch1      -0.057362   0.023492  -2.442    0.014617 *  
## Cont1:exp1      -0.011660   0.023493  -0.496    0.619660    
## Sch1:exp1        0.001834   0.023531   0.078    0.937873    
## Cont1:Sch1:exp1  0.006665   0.023491   0.284    0.776613    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) Cont1  Sch1   exp1   Cn1:S1 Cnt1:1 Sch1:1
## Cont1        0.006                                          
## Sch1         0.010 -0.006                                   
## exp1        -0.011 -0.004 -0.005                            
## Cont1:Sch1  -0.004  0.124  0.013  0.003                     
## Cont1:exp1  -0.003 -0.160  0.003  0.009 -0.036              
## Sch1:exp1   -0.007  0.007 -0.069  0.033 -0.014 -0.015       
## Cnt1:Sch1:1  0.002 -0.036 -0.006 -0.005 -0.160  0.124  0.029
anova(t2.acc.glmixed)
## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: Corr ~ Cont * Sch * exp + (1 | SN) + (1 | Im_comb) + (1 | evPos)
## Data: t2
## Df full model: 11
##              Df   Chisq Chi Df Pr(>Chisq)    
## Cont         10 11.2006      1  0.0008177 ***
## Sch          10 16.4896      1 0.00004892 ***
## exp          10  9.4708      1  0.0020877 ** 
## Cont:Sch     10  5.9306      1  0.0148803 *  
## Cont:exp     10  0.2450      1  0.6205974    
## Sch:exp      10  0.0060      1  0.9380801    
## Cont:Sch:exp 10  0.0801      1  0.7772001    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

### GLMM - post-hoc
t2.acc.m1 <- emmeans(t2.acc.glmixed, pairwise ~ Sch | Cont + exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)
contrast Cont exp odds.ratio SE df null z.ratio p.value
within / across paired imm 1.58 0.21 Inf 1 3.45 0
within / across unpaired imm 1.94 0.26 Inf 1 5.01 0
within / across paired cons 1.53 0.22 Inf 1 2.95 0
within / across unpaired cons 1.98 0.28 Inf 1 4.81 0

t2.acc.m2 <- emmeans(t2.acc.glmixed, pairwise ~ Cont | Sch + exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m2$contrasts) %>% kable(digits=2)
contrast Sch exp odds.ratio SE df null z.ratio p.value
paired / unpaired within imm 1.03 0.09 Inf 1 0.36 0.72
paired / unpaired across imm 1.27 0.10 Inf 1 2.89 0.00
paired / unpaired within cons 1.05 0.11 Inf 1 0.49 0.62
paired / unpaired across cons 1.36 0.13 Inf 1 3.29 0.00

t2.acc.m3 <- emmeans(t2.acc.glmixed, pairwise ~ exp | Sch + Cont, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m3$contrasts) %>% kable(digits=2)
contrast Sch Cont odds.ratio SE df null z.ratio p.value
imm / cons within paired 0.52 0.11 Inf 1 -2.98 0
imm / cons across paired 0.50 0.11 Inf 1 -3.20 0
imm / cons within unpaired 0.53 0.12 Inf 1 -2.89 0
imm / cons across unpaired 0.54 0.12 Inf 1 -2.89 0


2.2.2 Event Memory - Event Integration


Within과 Across 간의 차이를 통해 Event Integration 지표를 구성하였다. 이 값이 높을 수록 사전 예측과의 일치 여부에 따라 Event Memory 가 통합되었다는 것으로 해석될 수 있다.


## evIdx- Integration Score
t2accL.sch <- t2 %>% filter(Sch=='across') %>% group_by(SN, exp, Cont) %>% 
  dplyr::summarise(acc.sch = mean(Corr)*100) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
t2accL.nsch <- t2 %>% filter(Sch=='within') %>% group_by(SN, exp, Cont) %>% 
  dplyr::summarise(acc.nsch = mean(Corr)*100) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.

# subject-level, long format
t2accL.is <- merge(t2accL.sch, t2accL.nsch, key=c(SN,exp, Cont))
t2accL.is <- t2accL.is %>% group_by(SN, exp, Cont) %>% 
  dplyr::summarise(IS = (acc.nsch - acc.sch)) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'exp'. You can override using the `.groups` argument.
  # dplyr::summarise(IS = abs(acc.nsch - acc.sch)) %>% ungroup()
# t2accL.is %>% kable(digits=2)

# subject-level, wide format (SN/Btw/Block)
t2accW.is <- t2accL.is %>% spread(key=Cont, value = IS)
# t2accW.is %>% kable(digits=2)

# summary table: grand mean (eyerep/locrep)
t2accG.is <- t2accL.is %>% group_by(exp, Cont) %>%
  summarise(IS.m = mean(IS), IS.sd = sd(IS)) %>%
  ungroup()
## `summarise()` has grouped output by 'exp'. You can override using the `.groups` argument.
t2accG.is$IS.se <- Rmisc::summarySEwithin(data = t2accL.is, measurevar = "IS", 
                                          idvar = "SN", betweenvars = "exp",withinvars = c("Cont"))$se
t2accG.is$IS.ci <- Rmisc::summarySEwithin(data = t2accL.is, measurevar = "IS", 
                                          idvar = "SN", betweenvars = "exp",withinvars = c("Cont"))$ci
t2accG.is <- t2accG.is %>% 
  mutate(lower.ci = IS.m-IS.ci,
         upper.ci = IS.m+IS.ci,
         lower.se = IS.m-IS.se,
         upper.se = IS.m+IS.se)
# for between-subject design. check help(summarySE)
t2accG.is %>% dplyr::select(exp, Cont, IS.m) %>% 
  spread(key=Cont, value=IS.m) %>% kable(digits=2)
exp paired unpaired
imm 8.54 12.92
cons 5.63 9.86


t2.plot4 <- ggplot(data=t2accL.is, aes(x=Cont, y=IS, fill=Cont)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = 0.9,
               width = 0.8, show.legend = FALSE, color = "black", size = 0.2) +
  geom_hline(yintercept=0, linetype='solid', color='black', size=0.5) +
  geom_segment(data=filter(t2accW.is), inherit.aes = FALSE,
               aes(x=1, y=filter(t2accW.is)$paired,
                   xend=2, yend=filter(t2accW.is)$unpaired),
               color="gray80", alpha =.9) +
  geom_point(data=t2accL.is, position=position_dodge(0.80), color="gray80", alpha =.9,
             size=2, show.legend = FALSE) +
  geom_errorbar(data=t2accG.is, aes(y=IS.m, ymin = IS.m-IS.ci, ymax = IS.m+IS.ci), width=.2,
                position=position_dodge(.8), color = "black") +
  facet_grid(.~exp, scales="free_x", space = "free",
             labeller = labeller(exp = c("imm" = "Immediate","cons" = "Consolidated"))) +
  scale_x_discrete(labels=c("Paired", "Non-paired")) +
  scale_fill_manual(values = c("#D2E6BD", "#4AA7B4")) + # , "#235796"
  coord_cartesian(ylim = c(-20, 50), clip = "on") +
  scale_y_continuous(breaks = c(-20, -10, 0, 10,20,30,40,50)) +
  labs(x = "", y = "Segementation Index\n(Within - Across)") +
  # ggtitle("Association Memory Accuracy") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # aspect.ratio = 0.2,
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position=c(0.8, 0.85))
t2.plot4

t2.plot5<- ggplot(data=t2accL.is, aes(x=exp, y=IS, fill=exp)) +
  geom_violin(data= t2accL.is, aes(x=exp, y=IS, fill=exp), width = 0.7, trim=TRUE, 
              position = position_dodge(0.80), alpha = 0.15, show.legend = F) +
  # stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = 0.9, 
  #              width = 0.8, show.legend = FALSE, color = "black", size = 0.2) +
  geom_hline(yintercept=0, linetype='solid', color='black', size=0.5) +
  geom_dotplot(data=t2accL.is, aes(x=exp, y=IS, fill=exp),
               binaxis = "y", stackdir = "center", stackratio = 1.2,
               color = "black", alpha = 0.5, #position = "nudge",
               position=position_dodge(0.8),
               inherit.aes = TRUE, binwidth = 1.2,  show.legend = FALSE) + 
  geom_point(data=t2accG.is, aes(y = IS.m, x = exp, color=exp), 
             position=position_dodge(.8),
             size = 4, show.legend = F) + 
  geom_errorbar(data=t2accG.is, aes(y=IS.m, ymin = IS.m-IS.ci, ymax = IS.m+IS.ci), width=.2,
                position=position_dodge(.8), color = "black") +
  facet_grid(.~Cont, scales="free_x", space = "free") +
  scale_x_discrete(labels=c("Immediate", "Consolidated")) +
  scale_fill_manual(values = c("#2C57AA","#F17402")) +
  scale_color_manual(values = c("#2C57AA","#F17402")) +
  coord_cartesian(ylim = c(-20, 50), clip = "on") +
  scale_y_continuous(breaks = c(-20, -10, 0, 10,20,30,40,50)) +
  labs(x = "", y = "Segementation Index\n(Within - Across)") +
  # ggtitle("Association Memory Accuracy") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        # aspect.ratio = 0.2,
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position=c(0.8, 0.85))
t2.plot5


2.2.2.1 Factorial ANOVA


공고화 여부 x 일치 여부에 따른 Factorial ANOVA 및 Post-hoc 수행하였다.


t2.acc.aov2 <- aov_ez(id="SN", dv = "IS", data = t2accL.is, between = "exp",within = c("Cont"))
## Contrasts set to contr.sum for the following variables: exp
# test_sphericity(t2.acc.aov1)
nice(t2.acc.aov2, es="pes")
## Anova Table (Type 3 tests)
## 
## Response: IS
##     Effect    df   MSE        F   pes p.value
## 1      exp 1, 46 97.87     2.19  .045    .146
## 2     Cont 1, 46 36.70 12.12 **  .209    .001
## 3 exp:Cont 1, 46 36.70     0.00 <.001    .955
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

p_h1 <- t2accL.is %>% 
  group_by(exp) %>% 
  rstatix::pairwise_t_test(IS ~ Cont, 
                           p.adjust.method="bonferroni", 
                           paired=T, detailed=T) %>% 
  dplyr::select(exp, group1, group2, estimate, conf.low, conf.high, df, statistic, p.adj, p.adj.signif)

p_h2 <- t2accL.is %>% 
  group_by(exp) %>% 
  rstatix::cohens_d(IS ~ Cont, paired=T, ci = F) %>% 
  dplyr::select(exp,  group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("exp", "group1", "group2")) %>%  kable(digits=3)
exp group1 group2 estimate conf.low conf.high df statistic p.adj p.adj.signif effsize magnitude
cons paired unpaired -4.236 -8.068 -0.404 23 -2.287 0.032 * -0.467 small
imm paired unpaired -4.375 -7.765 -0.985 23 -2.670 0.014 * -0.545 moderate

p_h1 <- t2accL.is %>% 
  group_by(Cont) %>% 
  rstatix::t_test(IS ~ exp, 
                  paired=F, detailed=T, var.equal = T) %>% 
  dplyr::select(Cont, group1, group2, estimate, conf.low, conf.high, df, statistic, p)
p_h2 <- t2accL.is %>% 
  group_by(Cont) %>% 
  rstatix::cohens_d(IS ~ exp, paired=F, ci = F) %>% 
  dplyr::select(Cont, group1, group2, effsize, magnitude)
merge(p_h1, p_h2, by = c("Cont", "group1", "group2")) %>%  kable(digits=3)
Cont group1 group2 estimate conf.low conf.high df statistic p effsize magnitude
paired imm cons 2.917 -1.737 7.571 46 1.262 0.213 0.364 small
unpaired imm cons 3.056 -1.821 7.932 46 1.261 0.214 0.364 small


2.2.2.2 GLMM



t2accL.sch <- t2 %>% filter(Sch=='across') %>% group_by(SN, exp, Cont, evPos) %>% 
  dplyr::summarise(acc.sch = mean(Corr)*100) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
t2accL.nsch <- t2 %>% filter(Sch=='within') %>% group_by(SN, exp, Cont, evPos) %>% 
  dplyr::summarise(acc.nsch = mean(Corr)*100) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.

# subject-level, long format
t2accL.is <- merge(t2accL.sch, t2accL.nsch, key=c(SN, exp, Cont, evPos))
t2accL.is <- t2accL.is %>% group_by(SN, exp, Cont, evPos) %>% 
  dplyr::summarise(IS = (acc.nsch - acc.sch)) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'exp', 'Cont'. You can override using the `.groups` argument.
  # dplyr::summarise(IS = abs(acc.nsch - acc.sch)) %>% ungroup()
# t2accL.is %>% kable(digits=2)


### GLMM - afex
(nc <- detectCores())
## [1] 8
cl <- makeCluster(rep("localhost", nc))
# t2.acc.glmixed <- afex::mixed(Corr ~ Cont*Sch*exp + (Cont*Sch|SN) + (Cont*Sch|Im_comb),
t2.acc.lmixed <- afex::mixed(IS ~ Cont*exp + (1|SN) + (1|evPos),
                             data = t2accL.is,
                             method = "LRT", cl = cl,
                             expand_re = T,
                             control = lmerControl(optimizer = "bobyqa",
                                                   optCtrl = list(maxfun = 1e7)))
## Contrasts set to contr.sum for the following variables: Cont, exp, SN
## REML argument to lmer() set to FALSE for method = 'PB' or 'LRT'
## Fitting 4 (g)lmer() models.

# nested model을 비교하는 method (Singmann, & Kellen, 2017)
# 1) Kenward-Roger approximation : method ="KR"
# 2) Satterthwaite approximation : method = "S"
# 3) Likelihood Ratio Test : method = "LRT"
# 4) Parametric bootstrapping : method = "PB"
stopCluster(cl)

summary(t2.acc.lmixed)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: IS ~ Cont * exp + (1 | SN) + (1 | evPos)
##    Data: data
## Control: lmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 10000000))
## 
##      AIC      BIC   logLik deviance df.resid 
##   2334.1   2359.8  -1160.1   2320.1      281 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6477 -0.5965 -0.0305  0.6413  3.2563 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SN       (Intercept)  20.26    4.501  
##  evPos    (Intercept)  14.14    3.760  
##  Residual             164.76   12.836  
## Number of obs: 288, groups:  SN, 48; evPos, 3
## 
## Fixed effects:
##              Estimate Std. Error        df t value Pr(>|t|)   
## (Intercept)   9.23611    2.38873   3.47828   3.867  0.02340 * 
## Cont1        -2.15278    0.75635 237.78655  -2.846  0.00481 **
## exp1          1.49306    0.99707  47.30940   1.497  0.14092   
## Cont1:exp1   -0.03472    0.75635 237.78655  -0.046  0.96342   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##            (Intr) Cont1 exp1 
## Cont1      0.000             
## exp1       0.000  0.000      
## Cont1:exp1 0.000  0.000 0.000
anova(t2.acc.lmixed)
## Mixed Model Anova Table (Type 3 tests, LRT-method)
## 
## Model: IS ~ Cont * exp + (1 | SN) + (1 | evPos)
## Data: t2accL.is
## Df full model: 7
##          Df  Chisq Chi Df Pr(>Chisq)   
## Cont      6 7.9662      1   0.004766 **
## exp       6 2.1908      1   0.138834   
## Cont:exp  6 0.0021      1   0.963384   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

### GLMM - post-hoc
t2.acc.m1 <- emmeans(t2.acc.lmixed, pairwise ~ Cont | exp, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)
contrast exp estimate SE df t.ratio p.value
paired - unpaired imm -4.38 2.15 239.81 -2.04 0.04
paired - unpaired cons -4.24 2.15 239.81 -1.97 0.05


t2.acc.m1 <- emmeans(t2.acc.lmixed, pairwise ~ exp | Cont, type = "response") # adjust="bon" , "tukey"
summary(t2.acc.m1$contrasts) %>% kable(digits=2)
contrast Cont estimate SE df t.ratio p.value
imm - cons paired 2.92 2.53 112.56 1.15 0.25
imm - cons unpaired 3.06 2.53 112.56 1.21 0.23




3 Session Info


sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Monterey 12.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] parallel  stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] rstatix_0.7.0        effectsize_0.4.5     caret_6.0-88        
##  [4] psycho_0.6.1         effects_4.2-0        latticeExtra_0.6-29 
##  [7] ggpubr_0.4.0         emmeans_1.6.3        lmerTest_3.1-3      
## [10] afex_1.0-1           lme4_1.1-27.1        Matrix_1.3-4        
## [13] psych_2.1.9          car_3.0-11           carData_3.0-4       
## [16] knitr_1.37           forcats_0.5.1        stringr_1.4.0       
## [19] dplyr_1.0.7          purrr_0.3.4          readr_2.0.1         
## [22] tidyr_1.1.3          tibble_3.1.4         tidyverse_1.3.1     
## [25] ggbeeswarm_0.6.0     ggplot2_3.3.5        Rmisc_1.5           
## [28] plyr_1.8.6           lattice_0.20-44      pacman_0.5.1        
## [31] klippy_0.0.0.9500    patchwork_1.1.0.9000 papaja_0.1.0.9997   
## [34] devtools_2.4.2       usethis_2.0.1        distill_1.2         
## 
## loaded via a namespace (and not attached):
##   [1] utf8_1.2.2           tidyselect_1.1.1     grid_4.1.1          
##   [4] pROC_1.18.0          munsell_0.5.0        codetools_0.2-18    
##   [7] future_1.22.1        withr_2.4.3          colorspace_2.0-2    
##  [10] highr_0.9            rstudioapi_0.13      stats4_4.1.1        
##  [13] ggsignif_0.6.3       listenv_0.8.0        labeling_0.4.2      
##  [16] mnormt_2.0.2         farver_2.1.0         datawizard_0.2.0.1  
##  [19] rprojroot_2.0.2      coda_0.19-4          parallelly_1.28.1   
##  [22] vctrs_0.3.8          generics_0.1.0       TH.data_1.1-0       
##  [25] ipred_0.9-12         xfun_0.29            R6_2.5.1            
##  [28] cachem_1.0.6         assertthat_0.2.1     scales_1.1.1        
##  [31] multcomp_1.4-18      nnet_7.3-16          beeswarm_0.4.0      
##  [34] gtable_0.3.0         downlit_0.2.1        globals_0.14.0      
##  [37] processx_3.5.2       sandwich_3.0-1       timeDate_3043.102   
##  [40] rlang_0.4.12         splines_4.1.1        ModelMetrics_1.2.2.2
##  [43] broom_0.7.9.9000     yaml_2.2.1           reshape2_1.4.4      
##  [46] abind_1.4-5          modelr_0.1.8         backports_1.2.1     
##  [49] tools_4.1.1          lava_1.6.10          ellipsis_0.3.2      
##  [52] jquerylib_0.1.4      RColorBrewer_1.1-2   sessioninfo_1.1.1   
##  [55] Rcpp_1.0.7           ps_1.6.0             prettyunits_1.1.1   
##  [58] rpart_4.1-15         zoo_1.8-9            haven_2.4.3         
##  [61] fs_1.5.0             survey_4.1-1         magrittr_2.0.1      
##  [64] data.table_1.14.0    openxlsx_4.2.4       reprex_2.0.1        
##  [67] tmvnsim_1.0-2        mvtnorm_1.1-2        pkgload_1.2.2       
##  [70] hms_1.1.0            evaluate_0.14        xtable_1.8-4        
##  [73] pbkrtest_0.5.1       rio_0.5.27           jpeg_0.1-9          
##  [76] readxl_1.3.1         testthat_3.0.4       compiler_4.1.1      
##  [79] crayon_1.4.2         minqa_1.2.4          htmltools_0.5.2     
##  [82] tzdb_0.1.2           lubridate_1.7.10     DBI_1.1.1           
##  [85] dbplyr_2.1.1         MASS_7.3-54          boot_1.3-28         
##  [88] cli_3.1.0            mitools_2.4          insight_0.14.4      
##  [91] gower_0.2.2          pkgconfig_2.0.3      numDeriv_2016.8-1.1 
##  [94] foreign_0.8-81       recipes_0.1.16       xml2_1.3.3          
##  [97] foreach_1.5.1        vipor_0.4.5          estimability_1.3    
## [100] prodlim_2019.11.13   rvest_1.0.1          callr_3.7.0         
## [103] digest_0.6.29        parameters_0.14.0    rmarkdown_2.11      
## [106] cellranger_1.1.0     curl_4.3.2           nloptr_1.2.2.2      
## [109] lifecycle_1.0.0      nlme_3.1-152         jsonlite_1.7.2      
## [112] desc_1.3.0           fansi_0.5.0          pillar_1.6.2        
## [115] fastmap_1.1.0        httr_1.4.2           pkgbuild_1.2.0      
## [118] survival_3.2-11      glue_1.6.0           remotes_2.4.0       
## [121] bayestestR_0.11.0    zip_2.2.0            png_0.1-7           
## [124] iterators_1.0.13     class_7.3-19         stringi_1.7.6       
## [127] memoise_2.0.0        future.apply_1.8.1